subxt-codegen 0.29.0

Generate an API for interacting with a substrate node from FRAME metadata
Documentation

Library to generate an API for a Substrate runtime from its metadata.

Generated Structure

The API generator logic:

  • At the root there is the item_mod provided (ie pub mod api {})
  • Pallets are represented by a child module (ie pub mod PalletName {}) of the root
  • Each pallet exposes as child modules (if applicable):
  • Calls (pub mod calls {})
  • Events (pub mod events {})
  • Storage (pub mod storage {})
  • Constants (pub mod constants {})

Example

use std::fs;
use codec::Decode;
use subxt_metadata::Metadata;
use subxt_codegen::{CratePath, DerivesRegistry, TypeSubstitutes};

let encoded = fs::read("../artifacts/polkadot_metadata_full.scale").unwrap();

// Runtime metadata obtained from a node.
let metadata = Metadata::decode(&mut &*encoded).unwrap();
// Module under which the API is generated.
let item_mod = syn::parse_quote!(
pub mod api {}
);
// Default module derivatives.
let mut derives = DerivesRegistry::with_default_derives(&CratePath::default());
// Default type substitutes.
let substs = TypeSubstitutes::with_default_substitutes(&CratePath::default());
// Generate the Runtime API.
let generator = subxt_codegen::RuntimeGenerator::new(metadata);
// Include metadata documentation in the Runtime API.
let generate_docs = true;
let runtime_api = generator.generate_runtime(item_mod, derives, substs, CratePath::default(), generate_docs).unwrap();
println!("{}", runtime_api);